#include <sys/resource.h> // 提供进程资源控制和查询的函数声明，如getpriority, setpriority
#include <stdio.h>        // 提供标准输入输出功能，如printf, perror
#include <unistd.h>       // 提供POSIX操作系统API，如getpid()

int main() 
{
    // 获取当前进程的nice值
    // getpriority()函数用于获取进程、进程组或用户的当前nice值
    // 参数1: PRIO_PROCESS - 表示我们要操作的对象是一个进程
    // 参数2: getpid() - 获取当前进程的PID
    // 返回值: 成功时返回nice值(-20到19)，失败时返回-1并设置errno
    int priority = getpriority(PRIO_PROCESS, getpid());  
    // 打印当前进程的nice值
    printf("Current nice value: %d\n", priority);
    // 设置当前进程的nice值为10
    // setpriority()函数用于设置进程、进程组或用户的nice值
    // 参数1: PRIO_PROCESS - 表示我们要操作的对象是一个进程
    // 参数2: getpid() - 当前进程的PID
    // 参数3: 10 - 要设置的nice值(0-19之间的值，普通用户只能设置这个范围)
    // 返回值: 成功时返回0，失败时返回-1并设置errno
    if (setpriority(PRIO_PROCESS, getpid(), 10) == -1) 
    {
        // 如果设置失败，使用perror输出错误信息
        // 常见错误: EACCES - 权限不足(普通用户尝试设置负的nice值)
        //          ESRCH - 指定的进程不存在
        //          EINVAL - 参数无效
        perror("setpriority");
        return 1; // 返回非零值表示程序异常退出
    }
    // 再次获取并打印新的nice值，验证设置是否成功
    printf("New nice value: %d\n", getpriority(PRIO_PROCESS, getpid()));
    
    return 0; // 返回0表示程序正常退出
}
